<template>
  <div class="box">
    {{ 1 + 1 }}
  </div>
  <div>
    <button @click="add">添加</button>
  </div>
</template>
<script>
export default {
  data() {
    return {
      obj: {
        name: 0,
        list: [
          {
            name: 1,
            list: [
              {
                name: '1-1222',
                list: []
              },
              {
                name: '1-3333',
                list: []
              }
            ]
          },
          {
            name: 2,
            list: [
              {
                name: '2-1',
                list: []
              },
              {
                name: '2-3333-333',
                list: []
              }
            ]
          }
        ]
      },
      num: [1, 2, 3, 4],
      opt: ['+', '-', '*', '/']
    }
  },
  methods: {
    //这个主要是一种重复的结构的遍历
    scan(obj) {
      //遍历自身
      //读取name,读取list，然后遍历list中item，重复，我们要返回自己的信息，要提取子集中名字包含2的人，然后单独建立一个数组存储
      //先判断自身是否满足，如果满足，再添加子集的满足对象合并，如果要统计数量还是先统计自身数量，然后再添加子集数量
      let name = obj.name
      obj.hasNames = obj.hasNames || []
      if (new String(name).indexOf('2') > -1) {
        obj.hasNames.push(name)
      }
      for (var i = 0; i < obj.list.length; i++) {
        let item = obj.list[i]
        let child = this.scan(item)
        obj.hasNames = obj.hasNames.concat(child.hasNames)
      }
      obj.hasNames_len = obj.hasNames.length
      return obj
    },
    //这个主要要构建一种递归的结构
    //递归的路径一个是自己的结构长度，一个是构建的逻辑终点
    //结构未知模型
    scanNum(num, opt, save = []) {
      //这是自检递归，并且利用了栈保存状态
      //主要是用过的数字不能用
      for (var i = 0; i < num.length; i++) {
        let n = num[i]
        save.push(n)
        if (save.length == 7) console.log(save)
        else {
          for (var j = 0; j < opt.length; j++) {
            let nowOpt = opt[j]
            save.push(nowOpt)
            let leftNum = Object.assign([], num)
            leftNum.splice(i, 1)
            this.scanNum(leftNum, opt, save)
            save.pop()
          }
        }
        save.pop()
      }
    },
    add() {
      console.log(`helloworld`)
    }
  },
  mounted() {
    let newObj = this.scan(this.obj)
    console.log(newObj)
    console.log(`helloworld`)
    //this.scanNum(this.num, this.opt)
  }
}
</script>
<style type="text/css">
.box {
  width: 100px;
  height: 100px;
  border: 1px solid #000;
}
</style>
